package tpNombre;

import impl.AbstractSorter;
import impl.BubbleSorter;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Keevu
 * Date: 30/08/11
 * Time: 00:04
 * To change this template use File | Settings | File Templates.
 */
public class OrdenNombre {

     public static void main(String[] args) throws Exception {
        List<NombreCompleto> listaParaOrdenPorApellido = new ArrayList<NombreCompleto>();
        System.out.println("LISTA INICIAL:");
        listaParaOrdenPorApellido.add(new NombreCompleto("Alonso", "Paula"));
        listaParaOrdenPorApellido.add(new NombreCompleto("Diaz", "Diego"));
        listaParaOrdenPorApellido.add(new NombreCompleto("Alonso", "Diego"));
        List<NombreCompleto> listaParaOrdenPorNombre;
        listaParaOrdenPorNombre = listaParaOrdenPorApellido;
        printList(listaParaOrdenPorApellido);
        AbstractSorter sorter = new BubbleSorter();

        sorter.sort(new ordenPorApellido(), listaParaOrdenPorApellido);
        System.out.println("LISTA ORDENADA POR APELLIDO:");
        printList(listaParaOrdenPorApellido);

        sorter.sort(new ordenPorNombre(), listaParaOrdenPorNombre);
        System.out.println("LISTA ORDENADA POR NOMBRE:");
        printList(listaParaOrdenPorNombre);
    }

    private static void printList(List<NombreCompleto> list) {
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).getApellido() + ", " + list.get(i).getNombre());
        }
        System.out.println("\n\n");
    }

    private static class ordenPorApellido implements Comparator<NombreCompleto> {
        public int compare(NombreCompleto s1, NombreCompleto s2) {
            if (s1.getApellido().equalsIgnoreCase(s2.getApellido())) {
                return s1.getNombre().compareToIgnoreCase(s2.getNombre());
            } else {
                return s1.getApellido().compareToIgnoreCase(s2.getApellido());
            }
        }
    }

    private static class ordenPorNombre implements Comparator<NombreCompleto> {
        public int compare(NombreCompleto s1, NombreCompleto s2) {
            if (s1.getNombre().equalsIgnoreCase(s2.getNombre())) {
                return s1.getApellido().compareToIgnoreCase(s2.getApellido());
            } else {
                return s1.getNombre().compareToIgnoreCase(s2.getNombre());
            }
        }
    }
}